package com.zhongkai.service.impl;

import com.mysql.jdbc.StringUtils;
import com.zhongkai.CryptoUtil;
import com.zhongkai.app.service.AppBasicService;
import com.zhongkai.app.service.IBaseDao;
import com.zhongkai.jedis.JedisClient;
import com.zhongkai.model.utils.ZhongkaiResult;
import com.zhongkai.model3.*;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * APP基本信息
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class AppBasicServiceImpl implements AppBasicService {


    @Autowired
    private IBaseDao iBaseDao;


    @Autowired
    private JedisClient jedisClient;

    /**
     * APP修改头像
     *
     * @param app_uuid 用户uuid
     */
    @Override
    public ZhongkaiResult updataImg(String app_uuid, String url) {


        AppUser appUser = (AppUser) iBaseDao.get("from AppUser tb where tb.appUuid='" + app_uuid + "'");

        if (appUser == null) {
            return ZhongkaiResult.build(500, "用户不存在");
        }

        appUser.setAppImg(url);
        iBaseDao.update(appUser);

        return ZhongkaiResult.ok(appUser);
    }


    /**
     * APP增加apk版本
     */
    @Override
    public ZhongkaiResult apkup(String app_ver, Integer appCode, String url) {

        Appcode appcode = (Appcode) iBaseDao.get("from Appcode ac where ac.appVer='" + app_ver + "'");
        Appcode appcode2 = (Appcode) iBaseDao.get("from Appcode ac where ac.appCode=" + appCode);

        if (appcode != null){
            return ZhongkaiResult.build(500,"版本重复");
        }

        if (appcode2 != null){
            return ZhongkaiResult.build(500,"版本重复");
        }
        Appcode appcode3 = new Appcode();

        appcode3.setApkUrl(url);
        appcode3.setAppCode(appCode);
        appcode3.setAppVer(app_ver);

        iBaseDao.save(appcode3);

        return ZhongkaiResult.ok(appcode3);
    }

    @Override
    public ZhongkaiResult apkVer() {
        Appcode appcode  = (Appcode) iBaseDao.get("from Appcode se where se.id=(select max(se.id) from se)"); //获取表中id最大值

        return ZhongkaiResult.ok(appcode);
    }


    /**
     * 修改APP姓名
     *
     * @param app_uuid 用户uuid
     * @param app_name 用户姓名
     */
    @Override
    public ZhongkaiResult updataName(String app_uuid, String app_name) {
        if (StringUtils.isNullOrEmpty(app_uuid) || StringUtils.isNullOrEmpty(app_name)) {
            return ZhongkaiResult.build(500, "数据不完整");
        }

        AppUser appUser = (AppUser) iBaseDao.get("from AppUser tb where tb.appUuid='" + app_uuid + "'");

        if (appUser == null) {
            return ZhongkaiResult.build(500, "用户不存在");
        }




        appUser.setAppName(app_name);
        iBaseDao.update(appUser);

        List<SetUnit> list = iBaseDao.find("from SetUnit su where su.userUuid='" + app_uuid + "'");

        if (list != null){
            if (list.size() > 0) {
                for (SetUnit setUnit : list) {
                    setUnit.setUserName(app_name);
                    iBaseDao.update(setUnit);
                }
            }
        }

        return ZhongkaiResult.ok();
    }

    @Override
    public ZhongkaiResult updataAddress(String app_uuid, String province, String city, String country, String town, String address) {

        if (

                StringUtils.isNullOrEmpty(app_uuid) || StringUtils.isNullOrEmpty(province) ||
                        StringUtils.isNullOrEmpty(city) || StringUtils.isNullOrEmpty(country) ||
                        StringUtils.isNullOrEmpty(address)
                ) {
            return ZhongkaiResult.build(500, "数据不完整");
        }

        AppUser appUser = (AppUser) iBaseDao.get("from AppUser tb where tb.appUuid='" + app_uuid + "'");

        if (appUser == null) {
            return ZhongkaiResult.build(500, "用户不存在");
        }

        //验证地址
        Province province1 = (Province) iBaseDao.get("from Province pr where pr.provinceId='" + province + "'");

        City city1 = (City) iBaseDao.get("from City pr where pr.cityId='" + city + "'");

        Country country1 = (Country) iBaseDao.get("from Country pr where pr.countryId='" + country + "'");


        if (province1 == null || city1 == null || country1 == null) {
            return ZhongkaiResult.build(500, "该地区不存在,请重新选择");
        }

        String address_all = "";

        if ("1".equals(town) || StringUtils.isNullOrEmpty(town)) {
            address_all = province1.getName() + city1.getName() + country1.getName() + address;

        } else {
            Town town1 = (Town) iBaseDao.get("from Town pr where pr.townId='" + town + "'");

            if (town1 == null) {
                return ZhongkaiResult.build(500, "该地区不存在,请重新选择");
            }
            address_all = province1.getName() + city1.getName() + country1.getName() + town1.getName() + address;
        }


        appUser.setAppProvince(province);
        appUser.setAppCity(city);
        appUser.setAppCountry(country);
        appUser.setAppTown(town);
        appUser.setAppAddress(address);
        appUser.setAddress_all(address_all);

        iBaseDao.update(appUser);

        return ZhongkaiResult.ok(appUser);
    }


    /**
     * 修改密码
     *
     * @param app_uuid   用户uuid
     * @param password   新密码
     * @param passworded 旧密码
     */
    @Override
    public ZhongkaiResult updataPassword2(String app_uuid, String passworded, String password) {
        if (StringUtils.isNullOrEmpty(app_uuid) || StringUtils.isNullOrEmpty(passworded) || StringUtils.isNullOrEmpty(password)) {
            return ZhongkaiResult.build(500, "数据不完整");
        }

        AppUser appUser = (AppUser) iBaseDao.get("from AppUser tb where tb.appUuid='" + app_uuid + "'");

        if (appUser == null) {
            return ZhongkaiResult.build(500, "用户不存在");
        }

        String pass = CryptoUtil.encode64(CryptoUtil.SALT, passworded);

        if (!pass.equals(appUser.getAppPassword())) {
            return ZhongkaiResult.build(500, "密码错误");
        }

        String word = CryptoUtil.encode64(CryptoUtil.SALT, password);

        appUser.setAppPassword(word);

        iBaseDao.update(appUser);

        return ZhongkaiResult.ok();
    }


    /**
     * 修改手机号
     *
     * @param app_uuid 用户uuid
     * @param phone    新手机号
     */
    @Override
    public ZhongkaiResult updataPhone(String app_uuid, String phone, String code) {
        if (StringUtils.isNullOrEmpty(app_uuid)
                || StringUtils.isNullOrEmpty(phone) || StringUtils.isNullOrEmpty(code)) {
            return ZhongkaiResult.build(400, "数据不完整");
        }


        AppUser appUser = (AppUser) iBaseDao.get("from AppUser tb where tb.appUuid='" + app_uuid + "'");

        if (appUser == null) {
            return ZhongkaiResult.build(500, "用户不存在");
        }

        AppUser appUser_phone = (AppUser) iBaseDao.get("from AppUser tb where tb.appPhone='" + phone + "'"); //手机号

        if (appUser_phone != null) {
 /*           appUser_phone.setAppPhone("null");
            iBaseDao.update(appUser_phone);*/
            return ZhongkaiResult.build(500, "该手机已注册,如有疑问请联系管理员");
        }

        String jedcode = null;
        try {
            jedcode = jedisClient.get(phone);
        } catch (Exception e) {
            e.printStackTrace();
            return ZhongkaiResult.build(500, "redis连接获取失败");
        }


        if (StringUtils.isNullOrEmpty(jedcode)) {
            return ZhongkaiResult.build(400, "验证码获取失败");
        }

        if (!code.equals(jedcode)) {
            return ZhongkaiResult.build(400, "验证码错误");
        }

        if ("500".equals(jedcode)) {
            return ZhongkaiResult.build(500, "redis连接获取失败");
        }


        List<FsonUser> list = iBaseDao.find("from FsonUser su where su.appPhone='" + appUser.getAppPhone() + "'");

        for (FsonUser fsonUser : list) {
            fsonUser.setAppPhone(phone);
            iBaseDao.update(fsonUser); //修改绑定手机号
        }

        appUser.setAppPhone(phone); //修改

        iBaseDao.update(appUser); //修改


        List<SetUnit> list2 = iBaseDao.find("from SetUnit su where su.userUuid='" + app_uuid + "'");

        if (list2 != null){
            if (list2.size() > 0) {
                for (SetUnit setUnit : list2) {
                    setUnit.setUserPhone(phone);
                    iBaseDao.update(setUnit);
                }
            }
        }

        return ZhongkaiResult.ok();
    }


    /**
     * 获取公司联系电话
     */
    @Override
    public ZhongkaiResult getPhone() {
        return ZhongkaiResult.ok("87520668");
    }

    @Override
    public ZhongkaiResult getUsetXy() {
/*String s = "重要须知：本《最终用户许可协议》（以下简称“本协议”）是您（个人、公司、或其他组织）与河北中凯智境新能源股份有限公司技术有限公司及关联公司（以下简称\"河北中凯智境新能源股份有限公司\"）签订的关于本软件的最终用户使用许可协议。 河北中凯智境新能源股份有限公司在此特别提示您仔细阅读本协议中各条款，包括但不限于用户使用须知、法律责任与免责等。您的安装、使用行为将视为接受本协议。一旦安装或以任何方式使用本软件，即表示您已同意接受本协议的约束。如果您不同意本协议的条款，则不能获得安装、使用本软件的权利。本协议是您与河北中凯智境新能源股份有限公司就您下载、安装、使用本软件所订立的协议。本协议约定与您关于本软件使用许可方面的权利义务。\n" +
        "\n" +
        "1、知识产权声明\n" +
        "\n" +
        "本软件由河北中凯智境新能源股份有限公司开发或者由河北中凯智境新能源股份有限公司获得软件权利人（以下简称“许可人”）许可。本软件的知识产权以及与本软件相关的所有信息内容，包括但不限于：文字表述及其组合、图标、图饰、图表、色彩、界面设计、版面框架、有关数据、印刷材料、电子文档等，均受著作权法和国际著作权条约以及其他知识产权法律、法规的保护，其知识产权均归河北中凯智境新能源股份有限公司及其许可人所有。\n" +
        "\n" +
        "2、软件的许可\n" +
        "\n" +
        "（1）本协议未明示授权的其他一切权利均归河北中凯智境新能源股份有限公司及其许可人所有，如果\n" +
        "\n" +
        "您需要使用本协议未授予的任何其他权利，须另行取得河北中凯智境新能源股份有限公司的书面同意。\n" +
        "\n" +
        "（2）您通过本软件使用第三方的应用服务，应另行与该第三方签订服务\n" +
        "\n" +
        "协议。\n" +
        "\n" +
        "（3）河北中凯智境新能源股份有限公司许可您在河北中凯智境新能源股份有限公司手机上下载、安装、运行本软件。该许可是有限\n" +
        "\n" +
        "的、不可转让的、不可分许可的、可撤销的、非独占的、非排他的。\n" +
        "\n" +
        "（4）您只能在一台河北中凯智境新能源股份有限公司手机上下载、安装、运行本软件的一份副本。\n" +
        "\n" +
        "3、用户账户注册\n" +
        "\n" +
        "（1）您承诺以真实身份注册成为本软件的用户，并保证所提供的个人身\n" +
        "\n" +
        "份资料信息真实、完整、有效，并对您所提供的信息承担相应的法律责任。\n" +
        "\n" +
        "（2）您以其真实身份注册成为本软件用户后，需要修改所提供的个人身\n" +
        "\n" +
        "份资料信息的，河北中凯智境新能源股份有限公司将及时、有效地为其提供该项服务，但出于安全性和\n" +
        "\n" +
        "身份识别的考虑，你无法修改注册时提供的初始注册信息及其他验证信息。\n" +
        "\n" +
        "4、用户账号使用与保管\n" +
        "（1）河北中凯智境新能源股份有限公司有权审查您注册所提供的身份信息是否真实、有效，并将采取专业加密存储与传输方式等合理措施保障用户账号的安全、有效；您有义务妥善保管您的账号及密码，并正确、安全地使用您的账号及密码。任何一方未尽上述义务导致账号密码遗失、账号被盗等情形而给您和他人的民事权利造成损害的，应当承担由此产生的法律责任。\n" +
        "\n" +
        "（2）您对登录后所持账号产生的行为依法享有权利和承担责任。\n" +
        "\n" +
        "（3）如果您发现您的账号或密码被他人非法使用或有使用异常的情况的，应及时通知河北中凯智境新能源股份有限公司，并有权通知河北中凯智境新能源股份有限公司采取措施暂停该账号的登录和使用。\n" +
        "\n" +
        "（4）河北中凯智境新能源股份有限公司根据您的通知采取措施暂停您的账号的登录和使用的，将会要求您提供并核实与其注册身份信息相一致的个人有效身份信息。\n" +
        "\n" +
        "（5）河北中凯智境新能源股份有限公司核实您所提供的个人有效身份信息与所注册的身份信息相一致的，将及时采取措施暂停您的账号的登录和使用。\n" +
        "\n" +
        "（6）河北中凯智境新能源股份有限公司违反本条第一款项的约定，未及时采取措施暂停您的账号的登录和使用，因此而给您造成损失的，将承担其相应的法律责任。\n" +
        "\n" +
        "（7）如果您没有提供其个人有效身份证件或者您提供的个人有效身份证件与所注册的身份信息不一致的，河北中凯智境新能源股份有限公司有权拒绝您的上述请求。\n" +
        "\n" +
        "（8）当您为了维护您的合法权益，向河北中凯智境新能源股份有限公司提供与所注册的身份信息相一致的个人有效身份信息时，河北中凯智境新能源股份有限公司将为您提供账号注册人证明、原始注册信息等必要的协助和支持，并根据需要向有关行政机关和司法机关提供相关证据信息资料。";
        UserXy userXy = new UserXy();
        userXy.setId(1);
        userXy.setStringTxt(s.trim().replace("\n",""));

        iBaseDao.save(userXy);
        return ZhongkaiResult.ok(s.trim().replace("\n",""));*/

        UserXy appUser = (UserXy) iBaseDao.get("from UserXy tb where tb.id=1");

        return ZhongkaiResult.ok(appUser.getStringTxt());
    }


    /**
     * 客户留言
     *
     * @param app_uuid      用户uuid
     * @param mess_contents 内容
     */
    @Override
    public ZhongkaiResult messCenter(String app_uuid, String mess_contents) {
        if (StringUtils.isNullOrEmpty(app_uuid)
                || StringUtils.isNullOrEmpty(mess_contents)) {
            return ZhongkaiResult.build(400, "数据不完整");
        }

        AppUser appUser = (AppUser) iBaseDao.get("from AppUser tb where tb.appUuid='" + app_uuid + "'");

        if (appUser == null) {
            return ZhongkaiResult.build(500, "用户不存在");
        }

        MessCenter messCenter = new MessCenter();

        messCenter.setAppName(appUser.getAppName());
        messCenter.setAppPhone(appUser.getAppPhone());
        messCenter.setIsDispose("1");//1未解决 2 解决
        messCenter.setMessContents(mess_contents); //内容

        long millis = new DateTime().getMillis(); //获取当前系统时间戳

        messCenter.setMessTime(millis);

        iBaseDao.save(appUser);

        return ZhongkaiResult.ok();
    }


    @Override
    public ZhongkaiResult getUserData(String uuid) {
        AppUser appUser = (AppUser) iBaseDao.get("from AppUser tb where tb.appUuid='" + uuid + "'");

        return ZhongkaiResult.ok(appUser);
    }
}
